#ifndef MIRRORIMAGEALGORITHM_H
#define MIRRORIMAGEALGORITHM_H

#include "ImageProcessingAlgorithmBase.h"
#include "MirrorImageSettingsForm.h"
#include <QImage>

/**
 * @brief 图像镜像算法类
 * 该类提供水平和垂直镜像功能，可以将图像沿水平或垂直轴翻转
 */
class MirrorImageAlgorithm : public ImageProcessingAlgorithmBase
{
    Q_OBJECT
    Q_INTERFACES(ImageProcessingAlgorithmBase)
    Q_PLUGIN_METADATA(IID IMAGEPROCESSINGALGORITHMBASE_IID)
public:
    Q_INVOKABLE MirrorImageAlgorithm(QObject *parent = nullptr);

    /**
     * @brief 初始化算法
     */
    void initialize() override;

    /**
     * @brief 获取算法处理参数
     * @return 包含处理参数的QVariantMap
     */
    QVariantMap getProcessParameters() const override;

    /**
     * @brief 设置算法处理参数
     * @param params 包含处理参数的QVariantMap
     */
    void setProcessParameters(const QVariantMap &params) override;
    
    /**
     * @brief 恢复默认参数
     * 将算法的所有参数恢复到默认设置
     */
    void resetToDefaultParameters() override;

private:
    /**
     * @brief 设置输入图像
     * @param imageId 图像唯一标识符
     * @param input 输入图像
     */
    void setInputImage(const QString &imageId, const QImage &input) override;

    /**
     * @brief 获取当前处理的图像ID
     * @return 图像ID
     */
    QString currentImageId() const override;

    /**
     * @brief 执行图像处理
     * 处理结果将通过imageProcessed信号输出
     * @param parameters 处理参数字符串，每个参数之间使用,隔开
     */
    void processImage(const QString& parameters = "") override;

    /**
     * @brief 获取算法名称
     * @return 算法名称
     */
    QString algorithmName() const override;

    /**
     * @brief 设置镜像模式
     * @param horizontal 水平镜像
     * @param vertical 垂直镜像
     */
    void setMirrorMode(bool horizontal, bool vertical);

    /**
     * @brief 获取当前镜像模式
     * @param horizontal 水平镜像标志
     * @param vertical 垂直镜像标志
     */
    void mirrorMode(bool &horizontal, bool &vertical) const;

private:
    bool m_horizontalMirror; ///< 水平镜像标志
    bool m_verticalMirror;   ///< 垂直镜像标志
    MirrorImageSettingsForm* m_settingsForm; ///< 设置表单指针
    QImage m_inputImage; ///< 存储输入图像
    QString m_imageId; ///< 当前处理的图像ID
    bool m_processed; ///< 处理状态标志
};

#endif // MIRRORIMAGEALGORITHM_H
